import { ChartDataPoint } from '../types';


const API_BASE = 'http://127.0.0.1:8000/api';

async function analyzeViaBackend(analysisType: string, data: any): Promise<string> {
    try {
        const response = await fetch(`${API_BASE}/ai/analyze`, {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
            },
            body: JSON.stringify({ analysisType, data }),
        });
        if (!response.ok) {
            const errorBody = await response.text();
            console.error('AI分析API错误:', errorBody);
            return `AI分析服务错误: ${response.status}. 请检查后端服务。`;
        }
        const resData = await response.json();
        return resData.analysis ? resData.analysis.trim() : 'AI服务返回了空的回应。';
    } catch (error) {
        console.error('与AI分析API通信失败:', error);
        return '与AI分析服务通信时发生错误。请检查网络连接、后端服务状态:' + API_BASE;
    }
}


export const ollamaService = {
  analyzeTrainingProgress: async (
    epoch: number,
    lossData: ChartDataPoint[],
    accuracyData: ChartDataPoint[]
  ): Promise<string> => {
    const lastLoss = lossData[lossData.length - 1]?.value.toFixed(4) || 'N/A';
    const lastAccuracy = accuracyData[accuracyData.length - 1]?.value.toFixed(4) || 'N/A';
    
    console.log(`[Ollama Service] Analyzing training epoch ${epoch}...`);

    const prompt = `你是ResNeXt图像分类模型的专业训练分析师。请根据以下实时数据，为用户生成一份简洁、专业的分析报告和指导意见。请使用中文回答，并严格遵循提供的格式。

**分析任务：** 训练进度分析

**输入数据:**
- **当前纪元 (Epoch):** ${epoch}
- **最新训练损失 (Loss):** ${lastLoss}
- **最新准确率 (Accuracy):** ${lastAccuracy}

**输出格式要求:**
**纪元 ${epoch} 分析报告:**
- **训练损失 (Loss):** ${lastLoss} - [一句话分析损失值的表现，例如：持续下降，表明模型在有效学习。]
- **准确率 (Accuracy):** ${lastAccuracy} - [一句话分析准确率的表现，例如：稳步提升，模型分类能力增强。]

**指导意见:**
- **趋势:** [一句话总结当前学习趋势，例如：当前学习趋势健康。]
- **下一步:** [一句话建议，例如：继续监控，警惕过拟合。]`;

    return analyzeViaBackend('训练进度分析', {
      epoch,
      lastLoss,
      lastAccuracy,
      lossData,
      accuracyData,
    });
  },

  analyzeValidationResults: async (
    loss: number,
    accuracy: number,
  ): Promise<string> => {
    console.log(`[Ollama Service] Analyzing validation results...`);

    const prompt = `你是ResNeXt图像分类模型的专业训练分析师。请根据以下模型验证结果，为用户生成一份简洁、专业的分析报告和指导意见。请使用中文回答，并严格遵循提供的格式。

**分析任务：** 验证结果分析

**输入数据:**
- **验证损失 (Loss):** ${loss.toFixed(4)}
- **验证准确率 (Accuracy):** ${accuracy.toFixed(4)}

**输出格式要求:**
**验证结果分析:**
- **验证损失 (Loss):** ${loss.toFixed(4)}
- **验证准确率 (Accuracy):** ${(accuracy * 100).toFixed(2)}%

**指导意见:**
- **模型性能:** [一句话评估模型在验证集上的表现。]
- **泛化能力:** [一句话评论模型的泛化能力，提示用户与训练指标对比以发现过拟合风险。]`;

    return analyzeViaBackend('验证结果分析', {
      loss: loss.toFixed(4),
      accuracy: accuracy.toFixed(4),
    });
  },

  analyzeTestReport: async (): Promise<string> => {
    console.log(`[Ollama Service] Analyzing test report...`);
    
    const prompt = `你是ResNeXt图像分类模型的专业训练分析师。一个ResNeXt模型刚刚完成了在未知测试数据集上的最终测试。请为用户生成一份简洁、专业的最终测试报告摘要。请使用中文回答，并严格遵循提供的格式。

**分析任务：** 最终测试报告摘要

**输出格式要求:**
**最终测试报告摘要:**
- **综合评估:** [一句话对模型在未见过数据上的泛化能力和准确性进行综合评估。]
- **优势:** [一句话总结模型的主要优势，例如：对主要类别识别精确，鲁棒性强。]
- **潜在改进:** [一句话指出潜在的改进方向，例如：在某些易混淆类别上可进一步优化。]
- **结论:** [一句话给出最终结论，例如：模型已达到部署标准。]`;

    return analyzeViaBackend('最终测试报告摘要', {});
  },
};